\ test file for ficl
\ test ANSI CORE stuff first...
-1 set-order

\ set up local variable regressions before { gets redefined!
: local1 { a b c | clr -- c b a 0 }
    c b a clr
;

: local2 { | clr -- 0 } clr ;
: local3 { a b | c }
    a to c
    b to a
    c to b
    a b
;

include tester.fr
include core.fr

{ -> }
\ test double stuff
testing 2>r 2r> 2r@
: 2r1  2>r r> r> swap ;
: 2r2  swap >r >r 2r> ;
: 2r3  2>r 2r@ R> R> 2DUP >R >R SWAP 2r> ;

{ 1 2 2r1 -> 1 2 }
{ 1 2 2r2 -> 1 2 }
{ 1 2 2r3 -> 1 2 1 2 1 2 }
{ -> }

\ Now test ficl extras and optional word-sets
testing locals
{ 1 2 3 local1 -> 3 2 1 0 }
{ local2 -> 0 }
{ 1 local2 -> 1 0 }
{ 1 2 local3 -> 2 1 }

testing :noname
{ :noname 1 ; execute -> 1 }
{ 1 2 3 -rot -> 3 1 2 }

testing default search order
{ get-order -> forth-wordlist 1 }
{ only definitions get-order -> forth-wordlist 1 }

testing forget
here constant fence
{ fence forget fence -> here }

testing within
{ -1 1 0    within -> true }
{  0 1s 2   within -> true }
{ -100 0 -1 within -> true }
{ -1 1 2    within -> false }
{ -1 1 -2   within -> false }
{ 1 -5 5    within -> true }
{ 33000 32000 34000 within -> true }
{ 0x80000000 0x7f000000 0x81000000 within -> true }

testing exception words
: exc1 1 throw ;
: exctest1 [ ' exc1 ] literal catch ;
: exc2 exctest1 1 = if 2 throw endif ;
: exctest2 [ ' exc2 ] literal catch ;
: exctest? ' catch ;

{ exctest1 -> 1 }
{ exctest2 -> 2 }
{ exctest? abort -> -1 }

testing refill
\ from file loading
0 [if]
.( Error )
[else]
1 [if]
[else]
.( Error )
[then]
[then]

\ refill from evaluate string
{ -> }
{ s" 1 refill 2 " evaluate -> 1 0 2 }


testing prefixes
{ 0x10 -> decimal 16 }
{ hex 0d10 -> decimal 10 }
{ hex 100
-> decimal 256 }

testing number builder
{ 1 -> 1 }
{ 3. -> 3 0 }


s" ficlwin" environment?
[if]
drop
testing OOP support
include ooptest.fr
[endif]
